
package bean;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import datos.Contrato;
import datos.Programacion;
import java.math.BigDecimal;
import negocio.GestorObraLocal;
import negocio.GestorProgramacionLocal;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
public class ProgramacionBean {

    @EJB(beanName = "GestorProgramacionBean")
    private GestorProgramacionLocal gestorProgramacionBean;
    @EJB(beanName = "GestorObraBean")
    private GestorObraLocal gestorObraBean;
    private int id;
    private int idObra;
    private String periodo;
    private Date fecha;
    private Date fechaCreacion;
    private Date fechaModificacion;
    private Date fechaFin;
    private float avancePrevisto;
    private float SumAvancePrevisto;
    private float avanceReal;
    private float SumAvanceReal;
    private BigDecimal montoPrevisto;
    private BigDecimal SumMontoPrevisto;
    private BigDecimal montoReal;
    private BigDecimal SumMontoReal;
    private float retraso;
    private float SumRetraso;
    private String alerta;
    private String motivo;
    private boolean mostrarAgregar = false;
    private boolean mostrarModificar = false;
    private String nombreObra;
    private String codigoObra;
    private Date fechaInicioObra;
    private Date fechaFinObra;
    private float montoObra;
    private String estadoObra;
    private String nombreEmpresaContratista;
    private int idEmpresaContratista;
    private String plazoYTipo;
    private int idProgramacion;
    private int idProgramacionHistorial;
    private String tipo;
    private String ultimoMotivo;
    private org.richfaces.component.html.HtmlColumn columnaAlerta;

    /** Creates a new instance of ProgramacionBean */
    public ProgramacionBean() {
    }

   /***
    * 
    * @return una lista con todas los detalles de programaciones realizados 
    */

    public List getDetalleProgramacion() {
        Programacion pr = this.gestorProgramacionBean.programacionObra(idObra);
        this.setIdProgramacion(pr.getId());
        List<datos.DetalleProgramacion> Detalleprogramacion = this.gestorProgramacionBean.verDetalleProgramacionesObra(pr.getId());
        int i = 0;

        for (datos.DetalleProgramacion p : Detalleprogramacion) {
            if (i == 0) {
                p.setPeriodo(p.getPeriodo());
                p.setAvancePrevisto(p.getAvancePrevisto());
                p.setAvanceReal(p.getAvanceReal());
                p.setMontoPrevisto(p.getMontoPrevisto());
                p.setMontoReal(p.getMontoReal());
                p.setRetraso(p.getRetraso());
                p.setAlerta(p.getAlerta());

            }
            i++;
        }

        return Detalleprogramacion;

    }

    /**
     *
     * @return
     */
    public List getDetalleProgramacionHistorial() {

        List<datos.DetalleProgramacion> Detalleprogramacion = this.gestorProgramacionBean.verDetalleProgramacionesObra(this.getIdProgramacionHistorial());
        return Detalleprogramacion;
    }

    /**
     *
     * @return
     */
    public List getProgramaciones() {
        List<datos.Programacion> programacion = this.gestorProgramacionBean.verProgramacionesObra(this.idObra);
        return programacion;
    }

    /**
     *
     * @return
     */
    public List getMotivosProgramacion() {
        List<datos.Programacion> motivos = this.gestorProgramacionBean.verMotivosObra(this.idObra);
        return motivos;
    }

    /**
     *
     * @param e
     */
    public void historialOyente(ActionEvent e){
    UIParameter component = (UIParameter) e.getComponent().findComponent("idProgramacionHistorial");
    this.setIdProgramacionHistorial((Integer) Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @param e
     */
    public void cancelarOyente(ActionEvent e) {
        this.mostrarModificar = false;
        this.mostrarAgregar = false;
        this.setPeriodo("");
        this.setFecha(null);
        this.setAvancePrevisto(0.0f);
        this.setAvanceReal(0.0f);
        this.setMontoPrevisto(new BigDecimal("0.00"));
        this.setMontoReal(new BigDecimal("0.00"));
        this.setRetraso(0.0f);
        this.setAlerta("");
        this.setMotivo("");
    }

    /**
     *
     * @return
     */
    public String guardarProgramacion() {
        List<datos.Programacion> programacion = this.gestorProgramacionBean.verProgramacionesObra(this.idObra);
        if (!programacion.isEmpty()) {
            /***
             * guardar detalle, porque ya existe una programacion para la obra;
             */
            
            Programacion p = this.gestorProgramacionBean.programacionObra(idObra);
            this.gestorProgramacionBean.agregarDetalleProgramacion(idObra, periodo, fecha, avancePrevisto, avanceReal, montoPrevisto, montoReal, retraso, alerta, motivo, tipo, p);
            /***
             *  esto me actualiza alerta y retraso en Programacion segun datos de los detalles:
             */
            float acumuladoRetraso = this.getSumRetraso();
            this.gestorProgramacionBean.actualizarProgramacion(p, acumuladoRetraso);
            //
            this.mostrarAgregar = false;
            this.mostrarModificar = false;
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Detalle de Programación guardado con exito", ""));
            return null;
        } else {
            // la 1º vez debo guardar la programacion y el detalle;
            this.gestorProgramacionBean.agregarProgramacion(idObra, periodo, fecha, avancePrevisto, avanceReal, montoPrevisto, montoReal, retraso, alerta, motivo, tipo);
            Programacion p = this.gestorProgramacionBean.programacionObra(idObra);
            this.gestorProgramacionBean.agregarDetalleProgramacion(idObra, periodo, fecha, avancePrevisto, avanceReal, montoPrevisto, montoReal, retraso, alerta, motivo, tipo, p);
            // esto me actualiza alerta y retraso en Programacion segun datos de los detalles:
            float acumuladoRetraso = p.getRetraso();
//            float acumuladoRetraso = this.getSumRetraso();
            this.gestorProgramacionBean.actualizarProgramacion(p, acumuladoRetraso);
            //
            this.mostrarAgregar = false;
            this.mostrarModificar = false;
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Programación guardada con exito", ""));
            return null;
        }
    }

    /**
     *
     * @param e
     */
    public void guardarProgramacionOyente(ActionEvent e) {
        this.mostrarAgregar = true;
        this.mostrarModificar = false;
        this.setPeriodo("");
        this.setFecha(null);
        this.setFechaModificacion(null);
        this.setMontoPrevisto(new BigDecimal("0.00"));
        this.setMontoReal(new BigDecimal("0.00"));
        this.setAvancePrevisto(0.0f);
        this.setAvanceReal(0.0f);
        this.setRetraso(0.0f);
        this.setAlerta("");
        this.setMotivo("");

    }

    /**
     *
     * @return
     */
    public String reprogramar() {
        this.gestorProgramacionBean.reprogramar(idProgramacion, motivo);
        return null;
    }

    /**
     *
     * @param e
     */
    public void verProgramacionOyente(ActionEvent e) {
        UIParameter component = (UIParameter) e.getComponent().findComponent("idObraVerProgramacion");
        this.setIdObra((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("idEmpresaVerProgramacion");
        this.setIdEmpresaContratista((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("nombreObraVerProgramacion");
        this.setNombreObra(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("nombreEmpresaVerProgramacion");
        this.setNombreEmpresaContratista(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("fechaInicioObraVerProgramacion");
        if (component.getValue() != null) {
            this.setFechaInicioObra((Date) component.getValue());
        } else {
            this.setFechaInicioObra(null);
        }
        component = (UIParameter) e.getComponent().findComponent("fechaFinObraVerProgramacion");
        if (component.getValue() != null) {
            this.setFechaFinObra((Date) component.getValue());
        } else {
            this.setFechaFinObra(null);
        }
        component = (UIParameter) e.getComponent().findComponent("codigoObraVerProgramacion");
        if (component.getValue() != null) {
            this.setCodigoObra(component.getValue().toString());
        } else {
            this.setCodigoObra("");
        }
        component = (UIParameter) e.getComponent().findComponent("montoObraVerProgramacion");
        if (component.getValue() != null) {
            this.setMontoObra(Float.parseFloat(component.getValue().toString()));
        } else {
            this.setMontoObra(0.0f);
        }
        component = (UIParameter) e.getComponent().findComponent("estadoObraVerProgramacion");
        if (component.getValue() != null) {
            this.setEstadoObra(component.getValue().toString());
        } else {
            this.setEstadoObra("");
        }
    }

    /**
     *
     * @param e
     */
    public void modificarProgramacionOyente(ActionEvent e) {
        this.mostrarModificar = true;
        this.mostrarAgregar = false;
        UIParameter component = (UIParameter) e.getComponent().findComponent("idModificar");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("periodo");
        this.setPeriodo(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("fecha");
        this.setFecha((Date) component.getValue());
        component = (UIParameter) e.getComponent().findComponent("avancePrevisto");
        this.setAvancePrevisto(Float.parseFloat(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("avanceReal");
        this.setAvanceReal(Float.parseFloat(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("montoPrevisto");
        this.setMontoPrevisto(new BigDecimal(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("montoReal");
        this.setMontoReal(new BigDecimal(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("retraso");
        this.setRetraso(Float.parseFloat(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("alerta");
        this.setAlerta(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("motivo");
        this.setMotivo(component.getValue().toString());
    }


    /**
     *
     * @return
     */
    public String modificarProgramacion() {
        this.gestorProgramacionBean.modificarProgramacion(id, periodo, fecha, avancePrevisto, avanceReal, montoPrevisto, montoReal, retraso, alerta, motivo);
        // esta consulta devuelve Programacion, tipo='P':
        Programacion p = this.gestorProgramacionBean.programacionObra(idObra);
        
        // esto me actualiza alerta y retraso en Programacion segun datos de los detalles:
        float acumuladoRetraso = this.getSumRetraso();
        this.gestorProgramacionBean.actualizarProgramacion(p, acumuladoRetraso);
        this.mostrarAgregar = false;
        this.mostrarModificar = false;
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("La modificacion se realizo con exito", ""));
        return null;
    }

    /**
     *
     * @param e
     */
    public void eliminarProgramacionOyente(ActionEvent e) {
        UIParameter component = (UIParameter) e.getComponent().findComponent("idBorrar");
        this.setId(Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @return
     */
    public String eliminarProgramacion() {
        this.gestorProgramacionBean.eliminarProgramacion(this.getId());
        // esta consulta devuelve Programacion, tipo='P':
        Programacion p = this.gestorProgramacionBean.programacionObra(idObra);
        // esto me actualiza alerta y retraso en Programacion segun datos de los detalles:
        float acumuladoRetraso = this.getSumRetraso();
        this.gestorProgramacionBean.actualizarProgramacion(p, acumuladoRetraso);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Item de Programación eliminado con exito", ""));
        return null;
    }

    /***
     *
     * actualizarProgramacion(): busca las programaciones de una obra,
     * y llama al método this.gestorProgramacionBean.finProgramacion(p)
     * para actualizar la fecha de fin.
     * @return
     */
    public String actualizarProgramacion() {
        try {
            Programacion p = this.gestorProgramacionBean.programacionObra(idObra);
            this.gestorProgramacionBean.finProgramacion(p);
            return null;

        } catch (Exception e) {
            return null;
        }
        
    }

   
    /**
     *
     * @return
     */
    public Date getFechaCreacion() {
        Date primeraFecha = (Date) this.gestorProgramacionBean.fechaCreacion(this.idObra);
        if (primeraFecha != null) {
            this.setFechaCreacion(primeraFecha);
            return primeraFecha;
        } else {
            return null;
        }

    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the idObra
     */
    public int getIdObra() {
        return idObra;
    }

    /**
     * @param idObra the idObra to set
     */
    public void setIdObra(int idObra) {
        this.idObra = idObra;
    }

    /**
     * @return the periodo
     */
    public String getPeriodo() {
        return periodo;
    }

    /**
     * @param periodo the periodo to set
     */
    public void setPeriodo(String periodo) {
        this.periodo = periodo;
    }

    /**
     * @return the fecha
     */
    public Date getFecha() {
        return fecha;
    }

    /**
     * @param fecha the fecha to set
     */
    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    /**
     * @return the avancePrevisto
     */
    public float getAvancePrevisto() {
        return avancePrevisto;
    }

    /**
     * @param avancePrevisto the avancePrevisto to set
     */
    public void setAvancePrevisto(float avancePrevisto) {
        this.avancePrevisto = avancePrevisto;
    }

    /**
     * @return the avanceReal
     */
    public float getAvanceReal() {
        return avanceReal;
    }

    /**
     * @param avanceReal the avanceReal to set
     */
    public void setAvanceReal(float avanceReal) {
        this.avanceReal = avanceReal;
    }

    /**
     * @return the montoPrevisto
     */
    public BigDecimal getMontoPrevisto() {
        return montoPrevisto;
    }

    /**
     * @param montoPrevisto the montoPrevisto to set
     */
    public void setMontoPrevisto(BigDecimal montoPrevisto) {
        this.montoPrevisto = montoPrevisto;
    }

    /**
     * @return the montoReal
     */
    public BigDecimal getMontoReal() {
        return montoReal;
    }

    /**
     * @param montoReal the montoReal to set
     */
    public void setMontoReal(BigDecimal montoReal) {
        this.montoReal = montoReal;
    }

    /**
     * @return the retraso
     */
    public float getRetraso() {

        return retraso;
    }

    /**
     * @param retraso the retraso to set
     */
    public void setRetraso(float retraso) {
        this.retraso = retraso;
    }

    /**
     * @return the alerta
     */
    public String getAlerta() {
        return alerta;
    }

    /**
     * @param alerta the alerta to set
     */
    public void setAlerta(String alerta) {
        this.alerta = alerta;
    }

    /**
     * @return the mostrarAgregar
     */
    public boolean isMostrarAgregar() {
        return mostrarAgregar;
    }

    /**
     * @param mostrarAgregar the mostrarAgregar to set
     */
    public void setMostrarAgregar(boolean mostrarAgregar) {
        this.mostrarAgregar = mostrarAgregar;
    }

    /**
     * @return the mostrarModificar
     */
    public boolean isMostrarModificar() {
        return mostrarModificar;
    }

    /**
     * @param mostrarModificar the mostrarModificar to set
     */
    public void setMostrarModificar(boolean mostrarModificar) {
        this.mostrarModificar = mostrarModificar;
    }

    /**
     * @return the nombreObra
     */
    public String getNombreObra() {
        return nombreObra;
    }

    /**
     * @param nombreObra the nombreObra to set
     */
    public void setNombreObra(String nombreObra) {
        this.nombreObra = nombreObra;
    }

    /**
     * @return the codigoObra
     */
    public String getCodigoObra() {
        return codigoObra;
    }

    /**
     * @param codigoObra the codigoObra to set
     */
    public void setCodigoObra(String codigoObra) {
        this.codigoObra = codigoObra;
    }

    /**
     * @return the fechaInicioObra
     */
    public Date getFechaInicioObra() {
        return fechaInicioObra;
    }

    /**
     * @param fechaInicioObra the fechaInicioObra to set
     */
    public void setFechaInicioObra(Date fechaInicioObra) {
        this.fechaInicioObra = fechaInicioObra;
    }

    /**
     * @return the fechaFinObra
     */
    public Date getFechaFinObra() {
        return fechaFinObra;
    }

    /**
     * @param fechaFinObra the fechaFinObra to set
     */
    public void setFechaFinObra(Date fechaFinObra) {
        this.fechaFinObra = fechaFinObra;
    }

    /**
     * @return the montoObra
     */
    public float getMontoObra() {
        return montoObra;
    }

    /**
     * @param montoObra the montoObra to set
     */
    public void setMontoObra(float montoObra) {
        this.montoObra = montoObra;
    }

    /**
     * @return the estadoObra
     */
    public String getEstadoObra() {
        return estadoObra;
    }

    /**
     * @param estadoObra the estadoObra to set
     */
    public void setEstadoObra(String estadoObra) {
        this.estadoObra = estadoObra;
    }

    /**
     * @return the nombreEmpresaContratista
     */
    public String getNombreEmpresaContratista() {
        return nombreEmpresaContratista;
    }

    /**
     * @param nombreEmpresaContratista the nombreEmpresaContratista to set
     */
    public void setNombreEmpresaContratista(String nombreEmpresaContratista) {
        this.nombreEmpresaContratista = nombreEmpresaContratista;
    }

    /**
     * @return the motivo
     */
    public String getMotivo() {
        return motivo;
    }

    /**
     * @param motivo the motivo to set
     */
    public void setMotivo(String motivo) {
        this.motivo = motivo;
    }

    /**
     * @return the idEmpresaContratista
     */
    public int getIdEmpresaContratista() {
        return idEmpresaContratista;
    }

    /**
     * @param idEmpresaContratista the idEmpresaContratista to set
     */
    public void setIdEmpresaContratista(int idEmpresaContratista) {
        this.idEmpresaContratista = idEmpresaContratista;
    }

    /**
     * @return the plazo
     */
    public String getPlazoYTipo() {
        Contrato contr = this.gestorObraBean.encontrarContratoPorEmpresa(this.getIdEmpresaContratista(), this.getIdObra());
        if (contr != null) {
            plazoYTipo = contr.getPlazo() + " " + contr.getTipoPlazo();
        } else {
            plazoYTipo = "";
        }
        return plazoYTipo;
    }

    /**
     * @param plazo the plazo to set
     */
    public void setPlazoYTipo(String plazo) {
        this.plazoYTipo = plazo;
    }

    /**
     * @return the fechaModificacion
     */
    public Date getFechaModificacion() {
        Date ultimaFecha = (Date) this.gestorProgramacionBean.fechaModificacion(this.idObra);
        if (ultimaFecha != null) {
            this.setFechaModificacion(ultimaFecha);
            return ultimaFecha;
        } else {
            return this.getFechaCreacion();

        }

    }

    /**
     * @param fechaModificacion the fechaModificacion to set
     */
    public void setFechaModificacion(Date fechaModificacion) {
        this.fechaModificacion = fechaModificacion;
    }

    /**
     * @param fechaCreacion the fechaCreacion to set
     */
    public void setFechaCreacion(Date fechaCreacion) {
        this.fechaCreacion = fechaCreacion;
    }

    /**
     * @return the SumAvancePrevisto
     */
    public float getSumAvancePrevisto() {

        try {
            List<datos.DetalleProgramacion> p = this.gestorProgramacionBean.programacionesObra(this.idProgramacion);

            if (!p.isEmpty()) {
                int i = 0;
                float acumuladoAP = 0.0f;
                for (datos.DetalleProgramacion d : p) {
                    if (i == 0) {
                        d.setAvancePrevisto(d.getAvancePrevisto());
//                      
                        acumuladoAP += d.getAvancePrevisto();
                    } else {
                        d.setAvancePrevisto(d.getAvancePrevisto());
                        acumuladoAP += d.getAvancePrevisto();
                    }
                    i++;
                }

                this.setSumAvancePrevisto(acumuladoAP);
                return acumuladoAP;
            } else {
                return 0.0f;
            }

        } catch (Exception e) {
            return 0.0f;
        }
    }

    /**
     * @param SumAvancePrevisto the SumAvancePrevisto to set
     */
    public void setSumAvancePrevisto(float SumAvancePrevisto) {
        this.SumAvancePrevisto = SumAvancePrevisto;
    }

    /**
     * @return the SumAvanceReal
     */
    public float getSumAvanceReal() {
        try {
            List<datos.DetalleProgramacion> pr = this.gestorProgramacionBean.programacionesObra(this.idProgramacion);

            if (!pr.isEmpty()) {
                int i = 0;
                float acumuladoAR = 0.0f;
                for (datos.DetalleProgramacion p : pr) {
                    if (i == 0) {
                        p.setAvanceReal(p.getAvanceReal());
                        acumuladoAR += p.getAvanceReal();
                    } else {
                        p.setAvancePrevisto(p.getAvanceReal());
                        acumuladoAR += p.getAvanceReal();
                    }
                    i++;
                }

                this.setSumAvanceReal(acumuladoAR);
                return acumuladoAR;
            } else {
                return 0.0f;
            }

        } catch (Exception e) {
            return 0.0f;
        }
    }

    /**
     * @param SumAvanceReal the SumAvanceReal to set
     */
    public void setSumAvanceReal(float SumAvanceReal) {
        this.SumAvanceReal = SumAvanceReal;
    }

    /**
     * @return the SumMontoPrevisto
     */
    public BigDecimal getSumMontoPrevisto() {
        try {
            List<datos.DetalleProgramacion> pr = this.gestorProgramacionBean.programacionesObra(this.idProgramacion);

            if (!pr.isEmpty()) {
                int i = 0;
                BigDecimal acumuladoMP = new BigDecimal("0.00");
                for (datos.DetalleProgramacion p : pr) {
                    if (i == 0) {
                        p.setMontoPrevisto(p.getMontoPrevisto());
                        acumuladoMP = acumuladoMP.add(p.getMontoPrevisto());
                    } else {
                        p.setMontoPrevisto(p.getMontoPrevisto());
                        acumuladoMP = acumuladoMP.add(p.getMontoPrevisto());
                    }
                    i++;
                }

                this.setSumMontoPrevisto(acumuladoMP);
                return acumuladoMP;
            } else {
                return new BigDecimal("0.00");
            }

        } catch (Exception e) {
            return new BigDecimal("0.00");
        }
    }

    /**
     * @param SumMontoPrevisto the SumMontoPrevisto to set
     */
    public void setSumMontoPrevisto(BigDecimal SumMontoPrevisto) {
        this.SumMontoPrevisto = SumMontoPrevisto;
    }

    /**
     * @return the SumMontoReal
     */
    public BigDecimal getSumMontoReal() {
        try {
            List<datos.DetalleProgramacion> pr = this.gestorProgramacionBean.programacionesObra(this.idProgramacion);

            if (!pr.isEmpty()) {
                int i = 0;
                BigDecimal acumuladoAR = new BigDecimal("0.00");
                for (datos.DetalleProgramacion p : pr) {
                    if (i == 0) {
                        p.setMontoReal(p.getMontoReal());
                        acumuladoAR = acumuladoAR.add(p.getMontoReal());
                    } else {
                        p.setMontoReal(p.getMontoReal());
                        acumuladoAR = p.getMontoReal();
                    }
                    i++;
                }

                this.setSumMontoReal(acumuladoAR);
                return acumuladoAR;
            } else {
                return new BigDecimal("0.00");
            }

        } catch (Exception e) {
            return new BigDecimal("0.00");
        }
    }

    /**
     * @param SumMontoReal the SumMontoReal to set
     */
    public void setSumMontoReal(BigDecimal SumMontoReal) {
        this.SumMontoReal = SumMontoReal;
    }

    /**
     * @return the SumRetraso
     */
    public float getSumRetraso() {
        try {
            List<datos.DetalleProgramacion> r = this.gestorProgramacionBean.programacionesObra(this.idProgramacion);
            /** *
             * 
             * antes era lo de arriba por this.idObra;
             */

            if (!r.isEmpty()) {
                int i = 0;
                float acumuladoDetalle = 0.0f;
                for (datos.DetalleProgramacion p : r) {
//                    Programacion programacion = new Programacion();
                    if (i == 0) {
                        p.setRetraso(p.getRetraso());
                        acumuladoDetalle += p.getRetraso();
//                        programacion.setRetraso(programacion.getRetraso());
//                        acumulado += programacion.getRetraso();
                    } else {
                        p.setRetraso(p.getRetraso());
                        acumuladoDetalle += p.getRetraso();
//                        programacion.setRetraso(programacion.getRetraso());
//                        acumulado += programacion.getRetraso();
                    }
                    i++;
                }

                this.setSumAvancePrevisto(acumuladoDetalle);
                return acumuladoDetalle;
            } else {
                return 0.0f;
            }

        } catch (Exception e) {
            return 0.0f;
        }
    }

    /**
     * @param SumRetraso the SumRetraso to set
     */
    public void setSumRetraso(float SumRetraso) {
        this.SumRetraso = SumRetraso;
    }

     /**
     * @return the idProgramacion
     */
    public int getIdProgramacion() {
        return idProgramacion;
    }

    /**
     * @param idProgramacion the idProgramacion to set
     */
    public void setIdProgramacion(int idProgramacion) {
        this.idProgramacion = idProgramacion;
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    /**
     * @return the ultimoMotivo,
     * lo toma con la ultima fecha de creacion
     */
    public String getUltimoMotivo() {

       String ultimo = this.gestorProgramacionBean.programacionesMotivoObra(idObra);
        return ultimo;
    }

    /**
     * @param ultimoMotivo the ultimoMotivo to set
     */
    public void setUltimoMotivo(String ultimoMotivo) {
        this.ultimoMotivo = ultimoMotivo;
    }

    /**
     * @return the idProgramacionHistorial
     */
    public int getIdProgramacionHistorial() {
        return idProgramacionHistorial;
    }

    /**
     * @param idProgramacionHistorial the idProgramacionHistorial to set
     */
    public void setIdProgramacionHistorial(int idProgramacionHistorial) {
        this.idProgramacionHistorial = idProgramacionHistorial;
    }

    /**
     * @return the fechaFin
     */
    public Date getFechaFin() {
         /**
         *   buscar la fecha de fin de la ultima programacion para esa obra.
         */
        this.setFechaFin(this.gestorProgramacionBean.existeFechaFin(this.idObra)) ;
        return fechaFin;
    }

    /**
     * @param fechaFin the fechaFin to set
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }


    /**
     *
     * @return
     */
    public String getVerAlertaPorObra(){
        int idObraUltimaProgramacion=Integer.parseInt(columnaAlerta.getAttributes().get("idObraUltimaProgramacion").toString());
        datos.Programacion p = this.gestorProgramacionBean.programacionObra(idObraUltimaProgramacion);
        if(p!=null)return p.getAlerta();
        return "ROJO";
    }

    /**
     * @return the columnaAlerta
     */
    public org.richfaces.component.html.HtmlColumn getColumnaAlerta() {
        return columnaAlerta;
    }

    /**
     * @param columnaAlerta the columnaAlerta to set
     */
    public void setColumnaAlerta(org.richfaces.component.html.HtmlColumn columnaAlerta) {
        this.columnaAlerta = columnaAlerta;
    }

}
